//
//  NSDate+Extension.swift
//  SettingTime
//
//  Created by 姚彦兆 on 15/11/22.
//  Copyright © 2015年 姚彦兆. All rights reserved.
//

import UIKit

extension NSDate {

   class func getSinaDateWithString (dateSTR : String) -> NSDate?{
    
        //格式化日期与时间
        let formatter = NSDateFormatter()
    
        //Sun Nov 22 20:08:14 +0800 2015
    
        //格式化表达式
//        formatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
    
    let other : String = (dateSTR as NSString).substringWithRange(NSRange(location: 7, length: (dateSTR.characters.count - 7)))
    
    print("other is >>>>>>>>> |\(other)")
    
    let month : String = (dateSTR as NSString).substringWithRange(NSRange(location: 4, length: 3))
    var targetSTR : String = String()
    switch(month){
    case "Jan":
        targetSTR = "01"
    case "Feb":
        targetSTR = "02"
    case "Mar":
        targetSTR = "03"
    case "Apr":
        targetSTR = "04"
    case "May":
        targetSTR = "05"
    case "Jun":
        targetSTR = "06"
    case "Jul":
        targetSTR = "07"
    case "Aug":
        targetSTR = "08"
    case "Sep":
        targetSTR = "09"
    case "Oct":
        targetSTR = "10"
    case "Nov":
        targetSTR = "11"
    case "Dec":
        targetSTR = "12"
    default :
        targetSTR = ""
    }
    
    let formatterSTR : String = targetSTR + other
    
        formatter.dateFormat = "MM dd HH:mm:ss zzz yyyy"
        //赋值NSDate对象
        let date = formatter.dateFromString(formatterSTR)
        print("~~~~~~~~~~~\(date)------\(dateSTR)")
        //返回日期
        return date
        
    }
    
    //对时间的比较处理
    
    /*
    刚刚(一分钟内)
    X分钟前(一小时内)
    X小时前(当天)
    -------------
    
    昨天 HH:mm(昨天)
    MM-dd HH:mm(一年内)
    yyyy-MM-dd HH:mm(更早期)
    
    
    处理比较复杂的时间的运算 可以 NSCalendar  提供非常丰富的时间处理函数
    
    */
    
    func getDateDescription() -> String{
    
        let calendar : NSCalendar = NSCalendar.currentCalendar()
        
        if calendar.isDateInToday(self){
        
           print("今天")
            
            //当日期是今天的时候
            //计算差值
            
            let delta : NSInteger = NSInteger(NSDate().timeIntervalSinceDate(self))
            
            print(delta)
            
            //备注:日期1.timeIntervalSinceDate(日期2)这个表达式的计算方式是前一个日期减去后一个日期
            
            //判断是不是刚刚
            if(delta < 60){
            
                return "刚刚"
                
            }
            
            //判断是不是一小时之内
            if(delta < 3600){
            
                return "\(delta / 60)分钟之前"
            
            }
            
            //判断是不是今天
            if(delta < 86400){
            
                return "\(delta / 3600)小时之前"
            
            }
            
            return " 我勒个擦又算错了 "
            
        }else{
        
            //不是今天
//            昨天 HH:mm(昨天)
//            MM-dd HH:mm(一年内)
//            yyyy-MM-dd HH:mm(更早期)

            let formatter : NSDateFormatter = NSDateFormatter()
            //判断是否是昨天
            if calendar.isDateInYesterday(self){
            
                //如果是昨天
                formatter.dateFormat = "昨天 HH:mm"
            
            }else{
            
                //如果不是昨天,进行大范围比较
                let result : NSDateComponents = calendar.components(NSCalendarUnit.Year, fromDate: self, toDate: NSDate(), options: [])
                
                if result.year == 0 {
                    
                    //是今年
                    formatter.dateFormat = "MM-dd HH:mm"
                    
                }else{
                    
                    //不是今年
                    formatter.dateFormat = "yyyy-MM-dd HH:mm"
                    
                }
                
            }
            
            //备注: 注意ifelse的层次结构的问题
            let date = formatter.stringFromDate(self)
            
            return date
        
        }
    
    }
    
    
}
